package 建造者模式;
/*
 * 建造者模式将一个复杂对象的构建与表示分离，使得同样的构建过程可以创建不同的表示。
 */
/*
 * 优点:
 *    1、将复杂产品的创建步骤分解在不同的方法中，使得创建过程更加清晰，使得我们能够更加精确的控制复杂对象的产生过程。

      2、将产品的创建过程与产品本身分离开来，可以使用相同的创建过程来得到不同的产品。也就说细节依赖抽象。

      3、每一个具体建造者都相对独立，而与其他的具体建造者无关，因此可以很方便地替换具体建造者或增加新的具体建造者，用户使用不同的具体建造者即可得到不同的产品对象。
 */
/*
 * 缺点:
 *    1、建造者模式所创建的产品一般具有较多的共同点，其组成部分相似，如果产品之间的差异性很大，则不适合使用建造者模式，因此其使用范围受到一定的限制。
      2、如果产品的内部变化复杂，可能会导致需要定义很多具体建造者类来实现这种变化，导致系统变得很庞大。
 */
public class MainClass {
	public static void main(String[] args) throws Exception {
		//服务员
		Waiter waiter = new Waiter();
		//套餐A
		MealA a = new MealA();
		//服务员准备套餐A
		waiter.setMealBuilder(a);
		 //获得套餐
        Meal mealA = waiter.construct();
        
        System.out.print("套餐A的组成部分:");
        System.out.println(mealA.getFood()+"---"+mealA.getDrink());
	
	}
	
}
